/*
 * menu.h
 *
 *  Created on: 25/Abr/2010
 *      Author: Ângela Igreja
 */

#ifndef MENU_H_
#define MENU_H_

#include <string.h>
#include "compat.h"
#include "utypes.h"
#include "game.h"

/** @defgroup Menu Menu
 * @{
 *
 * Menu related functions
 */

#define SC_UP 0x48
#define SC_DOWN 0x50
#define SC_RET 0x1C


/**
 * Estrutura Option que tem como atributos o nome da opção e se foi seleccionada (select = 1) ou não (select = 0)
 */
typedef struct Option
{
	char * name;
	int select;
	int x_i;
	int y_i;
	int x_f;
	int y_f;
} Option;

/**
 * Estrutura Menu que tem como atributos o título do menu, o número de opções e uma lista de Opções
 */
typedef struct Menu
{
	char * title;
	int num_options;
	struct Option * list;
} Menu;

//extern char* video_base;
//extern char table[256 * CHR_H];

/**
 * Construtor de Menu
 * @param options Opcoes de escolha no menu
 * @param menu Menu
 * @param num_options Numero de opcoes possiveis (num_options = 1 -> 2 opcoes | num_options = 2 -> 3 opcoes ...)
 */
void initMenu( char options[][32]  , Menu * menu , int num_options);

/**
 * Funcao que imprime o menu
 * @param menu Menu
 * @param video_base endereco de memoria de video
 * @param table tabela de caracteres ASCII
 */
void printMenu( Menu * menu ,  char *video_base, char *table );

/**
 * Funcao que actualiza o menu
 * @return true se percorre se consegue percorrer as opcoes do menu (nao modifica menu se por exemplo premirmos outras teclas que não UP e DOWN)
 *
 * @param sc Scancode da tecla premida
 * @param menu Menu
 */
Bool updateMenu( int sc , Menu * menu );

/**
 * Funcao que devolve o indice correspondente a opcao do menu seleccionada.
 * @return indice corresponde a opcao do menu seleccionada
 *
 * @param menu Menu
 */
int selectedOption(Menu * menu);

/**
 * Funcao de novo menu no modo "Play", responsável por chamar o módulo de Jogo.
 * @param menu Menu
 * @param video_base Endereco de memoria de video
 * @param table Tabela de caracteres ASCII
 * @param base Porto Serie correspondente
 * @param best_players Apontador para array de melhores jogadores
 * @param mouse_sup Inteiro que representa o suporte do rato.
 */
void sub_menu( Menu * menu ,  char *video_base, char *table , Word base , Player ** best_players , int mouse_sup );


#endif /* MENU_H_ */
